/* 
 * File:   RaizProblemaAhorro.cpp
 * Author: jorgeorm
 * 
 * Created on 25 de diciembre de 2011, 07:39 PM
 */

#include "RaizProblemaAhorro.h"

RaizProblemaAhorro::RaizProblemaAhorro() {
    this->cotaError=0.005;
    this->ahorroInicial=1000000.0;
    this->interesAnual=0.03;
    this->razonDepoAnual=500000.0;
    this->valorEsperado=40000000.0;
}
RaizProblemaAhorro::RaizProblemaAhorro(long double cotaError) {
    this->cotaError=cotaError;
    this->ahorroInicial=1000000.0;
    this->interesAnual=0.03;
    this->razonDepoAnual=500000.0;
    this->valorEsperado=40000000.0;
}

// Instancia objeto RaizproblemaAhorro recibe
// @param cotaError cota para el error
// @param a0 ahorro inicial
// @param r interes anual
// @param q razón de depositos anuales
// @param at valor total que se espera ahorrar

RaizProblemaAhorro::RaizProblemaAhorro(long double cotaError, long double a0, long double r, long double q, long double at) {
    this->cotaError=cotaError;
    this->ahorroInicial=a0;
    this->interesAnual=r;
    this->razonDepoAnual=q;
    this->valorEsperado=at;
}

//RaizProblemaAhorro::RaizProblemaAhorro(const RaizProblemaAhorro& orig) {
//     this->cotaErrorBiseccion=cotaError;
//    this->ahorroInicial=a0;
//    this->interesAnual=r;
//    this->razonDepoAnual=q;
//    this->valorEsperado=at;
//}

RaizProblemaAhorro::~RaizProblemaAhorro() {
     this->cotaError=0;
    this->ahorroInicial=0;
    this->interesAnual=0;
    this->razonDepoAnual=0;
    this->valorEsperado=0;
}

long double RaizProblemaAhorro::funcion(long double param)
{
    long double retorno=0;
    retorno= (ahorroInicial*exp(param*interesAnual))+((razonDepoAnual/interesAnual)*(exp(interesAnual*param)-1))-valorEsperado;
    return retorno;
}

//Derivadad uno de la función a calcular raíz.
//
long double RaizProblemaAhorro::derivadaFuncion(long double param)
{
    long double retorno=0;
    retorno= (ahorroInicial*interesAnual*exp(param*interesAnual))+(razonDepoAnual*exp(interesAnual*param));
    return retorno;
}

//Derivada de orden dos de la función a calcular raíz
//
long double RaizProblemaAhorro::derivadaDosFuncion(long double param)
{
    long double retorno=0;
    retorno= (ahorroInicial*pow(interesAnual,2.0)*exp(param*interesAnual))+(razonDepoAnual*interesAnual*exp(interesAnual*param));
    return retorno;
}

//Setters y Getters
//
long double RaizProblemaAhorro::getAhorroInicial(){
    return this->ahorroInicial;
   
}
void RaizProblemaAhorro::setAhorrorInicial( long double param ){
    this->ahorroInicial=param;
}

long double RaizProblemaAhorro::getInteresAnual(){
    return this->interesAnual;
   
}
void RaizProblemaAhorro::setInteresAnual( long double param ){
    this->interesAnual=param;
}

long double RaizProblemaAhorro::getRazonDepoAnual(){
    return this->razonDepoAnual;
   
}
void RaizProblemaAhorro::setRazonDepoAnual( long double param ){
    this->razonDepoAnual=param;
}

long double RaizProblemaAhorro::getValorEsperado(){
    return this->valorEsperado;
   
}
void RaizProblemaAhorro::setValorEsperado( long double param ){
    this->valorEsperado=param;
}